<?php

/**
 * Plugin żądania dotyczący anych GET
 *
 */
class Rapide_Request_Plugin_Get extends Rapide_Request_Plugin
{
	protected
		$_bTrim	= true,
		$_bQuote = true,
		$_bXSS	 = true;

	/**
	 * Konstruuje obiekt pluginu inicjalizując go danymi GET
	 *
	 */
	public function __construct()
	{
		parent::__construct($_GET);
	}

	/**
	 * Inicjalizuje obiekt pluginu
	 *
	 * Należy pamiętać, że parametr $bXSS włącza jedynie prostą ochronę przed
	 * atakami XSS. Dane będą filtrowane za pomocą htmlentities().
	 * 
	 * @param bool $bTrim ucinanie białych znaków z początku i końca łańcucha
	 * @param bool $bQuote dodawanie ukośników w łańcuchu dla baz danych
	 * @param bool $bXSS ochrona przed XSS
	 */
	public function init($bTrim = true, $bQuote = true, $bXSS = true)
	{
		$this->_bTrim = (bool)$bTrim;
		$this->_bQuote = (bool)$bQuote;
		$this->_bXSS  = (bool)$bXSS;
	}

	/**
	 * Zwraca wartość parametru stosując filtrowanie
	 *
	 * @param string $sParameter
	 * @return string
	 */
	public function get($sParameter)
	{
		if(!$this->has($sParameter))
			return null;

		$mValue = parent::get($sParameter);

		if(is_array($mValue))
		{
			array_walk_recursive($mValue, array($this, '_filter'));
		}
		else
		{
			$this->_filter($mValue);
		}

		return $mValue;
	}

	/**
	 * Filtruje dane
	 *
	 * @param string $sValue
	 */
	protected function _filter(& $sValue)
	{
		if(get_magic_quotes_gpc())
			$sValue = stripslashes($sValue);

		if($this->_bTrim)
			$sValue = trim($sValue);

		if($this->_bXSS)
			$sValue = $this->_xss($sValue);

		if($this->_bQuote)
			$sValue = addslashes($sValue);
	}

	/**
	 * Chroni dane przed atakami XSS
	 *
	 * @param string $sValue
	 * @return string
	 */
	protected function _xss($sValue)
	{
		$sValue = htmlentities($sValue, ENT_COMPAT, 'UTF-8');
		return $sValue;
	}
}

?>